using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DefenseTools._GriddedReferenceGraphic
{
    /// <summary>
    /// <para>Generate Reference System Grid From Area</para>
    /// <para>Creates Gridded Reference Graphics (GRG) based on Military Grid Reference System (MGRS) or United States National Grid (USNG) reference grids.</para>
    /// <para>基于军用格网参考系 （MGRS） 或美国国家格网 （USNG） 参考格网创建网格参考图形 （GRG）。</para>
    /// </summary>    
    [DisplayName("Generate Reference System Grid From Area")]
    public class GenerateReferenceSystemGRGFromArea : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GenerateReferenceSystemGRGFromArea()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Feature</para>
        /// <para>The input polygon feature on which the GRG will be based.</para>
        /// <para>GRG 将基于的输入面要素。</para>
        /// </param>
        /// <param name="_output_feature_class">
        /// <para>Output Feature Class</para>
        /// <para>The output polygon feature class containing the GRG.</para>
        /// <para>包含 GRG 的输出面要素类。</para>
        /// </param>
        /// <param name="_grid_reference_system">
        /// <para>Grid Reference System</para>
        /// <para><xdoc>
        ///   <para>Specifies the reference system the GRG will use.</para>
        ///   <bulletList>
        ///     <bullet_item>Military Grid Reference System—The Military Grid Reference System will be used. This is the default.</bullet_item><para/>
        ///     <bullet_item>United States National Grid—The United States National Grid will be used.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定 GRG 将使用的参考系。</para>
        ///   <bulletList>
        ///     <bullet_item>军用格网参考系—将使用军用格网参考系。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>美国国家电网—将使用美国国家电网。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        /// <param name="_grid_square_size">
        /// <para>Grid Square Size</para>
        /// <para><xdoc>
        ///   <para>Specifies the grid square size that will be used for the cells in the GRG.</para>
        ///   <bulletList>
        ///     <bullet_item>Grid Zone Designator—The size of the grid cells will be a Grid Zone. This is the default.</bullet_item><para/>
        ///     <bullet_item>100,000 m grid—The size of the grid cells will be 100,000-meter grid squares.</bullet_item><para/>
        ///     <bullet_item>10,000 m grid—The size of the grid cells will be 10,000-meter grid squares.</bullet_item><para/>
        ///     <bullet_item>1,000 m grid—The size of the grid cells will be 1,000-meter grid squares.</bullet_item><para/>
        ///     <bullet_item>100 m grid—The size of the grid cells will be 100-meter grid squares.</bullet_item><para/>
        ///     <bullet_item>10 m grid—The size of the grid cells will be 10-meter grid squares.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将用于 GRG 中单元格的网格正方形大小。</para>
        ///   <bulletList>
        ///     <bullet_item>格网区域指示符 - 格网像元的大小将为格网区域。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>100,000 m 格网—格网像元的大小为 100,000 米格网正方形。</bullet_item><para/>
        ///     <bullet_item>10,000 米格网—格网像元的大小为 10,000 米格网方块。</bullet_item><para/>
        ///     <bullet_item>1,000 m 格网—格网像元的大小为 1,000 米格网正方形。</bullet_item><para/>
        ///     <bullet_item>100 米格网—格网像元的大小为 100 米格网正方形。</bullet_item><para/>
        ///     <bullet_item>10 米格网—格网像元的大小为 10 米格网正方形。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public GenerateReferenceSystemGRGFromArea(object _in_features, object _output_feature_class, _grid_reference_system_value _grid_reference_system, _grid_square_size_value _grid_square_size)
        {
            this._in_features = _in_features;
            this._output_feature_class = _output_feature_class;
            this._grid_reference_system = _grid_reference_system;
            this._grid_square_size = _grid_square_size;
        }
        public override string ToolboxName => "Defense Tools";

        public override string ToolName => "Generate Reference System Grid From Area";

        public override string CallName => "defense.GenerateReferenceSystemGRGFromArea";

        public override List<string> AcceptEnvironments => ["outputCoordinateSystem", "scratchWorkspace", "workspace"];

        public override object[] ParameterInfo => [_in_features, _output_feature_class, _grid_reference_system.GetGPValue(), _grid_square_size.GetGPValue(), _large_grid_handling.GetGPValue()];

        /// <summary>
        /// <para>Input Feature</para>
        /// <para>The input polygon feature on which the GRG will be based.</para>
        /// <para>GRG 将基于的输入面要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Feature")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Output Feature Class</para>
        /// <para>The output polygon feature class containing the GRG.</para>
        /// <para>包含 GRG 的输出面要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _output_feature_class { get; set; }


        /// <summary>
        /// <para>Grid Reference System</para>
        /// <para><xdoc>
        ///   <para>Specifies the reference system the GRG will use.</para>
        ///   <bulletList>
        ///     <bullet_item>Military Grid Reference System—The Military Grid Reference System will be used. This is the default.</bullet_item><para/>
        ///     <bullet_item>United States National Grid—The United States National Grid will be used.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定 GRG 将使用的参考系。</para>
        ///   <bulletList>
        ///     <bullet_item>军用格网参考系—将使用军用格网参考系。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>美国国家电网—将使用美国国家电网。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Grid Reference System")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _grid_reference_system_value _grid_reference_system { get; set; }

        public enum _grid_reference_system_value
        {
            /// <summary>
            /// <para>Military Grid Reference System</para>
            /// <para>Military Grid Reference System—The Military Grid Reference System will be used. This is the default.</para>
            /// <para>军用格网参考系—将使用军用格网参考系。这是默认设置。</para>
            /// </summary>
            [Description("Military Grid Reference System")]
            [GPEnumValue("MGRS")]
            _MGRS,

            /// <summary>
            /// <para>United States National Grid</para>
            /// <para>United States National Grid—The United States National Grid will be used.</para>
            /// <para>美国国家电网—将使用美国国家电网。</para>
            /// </summary>
            [Description("United States National Grid")]
            [GPEnumValue("USNG")]
            _USNG,

        }

        /// <summary>
        /// <para>Grid Square Size</para>
        /// <para><xdoc>
        ///   <para>Specifies the grid square size that will be used for the cells in the GRG.</para>
        ///   <bulletList>
        ///     <bullet_item>Grid Zone Designator—The size of the grid cells will be a Grid Zone. This is the default.</bullet_item><para/>
        ///     <bullet_item>100,000 m grid—The size of the grid cells will be 100,000-meter grid squares.</bullet_item><para/>
        ///     <bullet_item>10,000 m grid—The size of the grid cells will be 10,000-meter grid squares.</bullet_item><para/>
        ///     <bullet_item>1,000 m grid—The size of the grid cells will be 1,000-meter grid squares.</bullet_item><para/>
        ///     <bullet_item>100 m grid—The size of the grid cells will be 100-meter grid squares.</bullet_item><para/>
        ///     <bullet_item>10 m grid—The size of the grid cells will be 10-meter grid squares.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将用于 GRG 中单元格的网格正方形大小。</para>
        ///   <bulletList>
        ///     <bullet_item>格网区域指示符 - 格网像元的大小将为格网区域。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>100,000 m 格网—格网像元的大小为 100,000 米格网正方形。</bullet_item><para/>
        ///     <bullet_item>10,000 米格网—格网像元的大小为 10,000 米格网方块。</bullet_item><para/>
        ///     <bullet_item>1,000 m 格网—格网像元的大小为 1,000 米格网正方形。</bullet_item><para/>
        ///     <bullet_item>100 米格网—格网像元的大小为 100 米格网正方形。</bullet_item><para/>
        ///     <bullet_item>10 米格网—格网像元的大小为 10 米格网正方形。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Grid Square Size")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _grid_square_size_value _grid_square_size { get; set; }

        public enum _grid_square_size_value
        {
            /// <summary>
            /// <para>Grid Zone Designator</para>
            /// <para>Grid Zone Designator—The size of the grid cells will be a Grid Zone. This is the default.</para>
            /// <para>格网区域指示符 - 格网像元的大小将为格网区域。这是默认设置。</para>
            /// </summary>
            [Description("Grid Zone Designator")]
            [GPEnumValue("GRID_ZONE_DESIGNATOR")]
            _GRID_ZONE_DESIGNATOR,

            /// <summary>
            /// <para>100,000 m grid</para>
            /// <para>100,000 m grid—The size of the grid cells will be 100,000-meter grid squares.</para>
            /// <para>100,000 m 格网—格网像元的大小为 100,000 米格网正方形。</para>
            /// </summary>
            [Description("100,000 m grid")]
            [GPEnumValue("100000M_GRID")]
            _100000M_GRID,

            /// <summary>
            /// <para>10,000 m grid</para>
            /// <para>10,000 m grid—The size of the grid cells will be 10,000-meter grid squares.</para>
            /// <para>10,000 米格网—格网像元的大小为 10,000 米格网方块。</para>
            /// </summary>
            [Description("10,000 m grid")]
            [GPEnumValue("10000M_GRID")]
            _10000M_GRID,

            /// <summary>
            /// <para>1,000 m grid</para>
            /// <para>1,000 m grid—The size of the grid cells will be 1,000-meter grid squares.</para>
            /// <para>1,000 m 格网—格网像元的大小为 1,000 米格网正方形。</para>
            /// </summary>
            [Description("1,000 m grid")]
            [GPEnumValue("1000M_GRID")]
            _1000M_GRID,

            /// <summary>
            /// <para>100 m grid</para>
            /// <para>100 m grid—The size of the grid cells will be 100-meter grid squares.</para>
            /// <para>100 米格网—格网像元的大小为 100 米格网正方形。</para>
            /// </summary>
            [Description("100 m grid")]
            [GPEnumValue("100M_GRID")]
            _100M_GRID,

            /// <summary>
            /// <para>10 m grid</para>
            /// <para>10 m grid—The size of the grid cells will be 10-meter grid squares.</para>
            /// <para>10 米格网—格网像元的大小为 10 米格网正方形。</para>
            /// </summary>
            [Description("10 m grid")]
            [GPEnumValue("10M_GRID")]
            _10M_GRID,

        }

        /// <summary>
        /// <para>Large Grid Handling</para>
        /// <para><xdoc>
        ///   <para>Specifies how large input areas that may contain many features will be handled.</para>
        ///   <bulletList>
        ///     <bullet_item>No large grids—Processing will stop when 2000 features are created. This is the default.</bullet_item><para/>
        ///     <bullet_item>Allow large grids—Large grids are supported.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将处理可能包含许多要素的输入区域的大小。</para>
        ///   <bulletList>
        ///     <bullet_item>无大格网 - 创建 2000 个要素时，处理将停止。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>允许大型格网 - 支持大型格网。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Large Grid Handling")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _large_grid_handling_value _large_grid_handling { get; set; } = _large_grid_handling_value._NO_LARGE_GRIDS;

        public enum _large_grid_handling_value
        {
            /// <summary>
            /// <para>No large grids</para>
            /// <para>No large grids—Processing will stop when 2000 features are created. This is the default.</para>
            /// <para>无大格网 - 创建 2000 个要素时，处理将停止。这是默认设置。</para>
            /// </summary>
            [Description("No large grids")]
            [GPEnumValue("NO_LARGE_GRIDS")]
            _NO_LARGE_GRIDS,

            /// <summary>
            /// <para>Allow large grids</para>
            /// <para>Allow large grids—Large grids are supported.</para>
            /// <para>允许大型格网 - 支持大型格网。</para>
            /// </summary>
            [Description("Allow large grids")]
            [GPEnumValue("ALLOW_LARGE_GRIDS")]
            _ALLOW_LARGE_GRIDS,

        }

        public GenerateReferenceSystemGRGFromArea SetEnv(object outputCoordinateSystem = null, object scratchWorkspace = null, object workspace = null)
        {
            base.SetEnv(outputCoordinateSystem: outputCoordinateSystem, scratchWorkspace: scratchWorkspace, workspace: workspace);
            return this;
        }

    }

}